/**********************************************************************\

 Copyright 2012 Diggory Blake

 This file is part of klip-engine

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

\**********************************************************************/
#pragma once

#include <GL/glew.h>

class kImageGL;
class kGraphicsGL;

#include "kimage.h"

class kImageGL : public kImage {
	friend class kGraphicsGL;
private:
	kGraphicsGL* _graphics;
	GLuint _frameBuffer;
	GLuint _texture;

	virtual void doProcess(kRect* region, bool readonly, std::function<void (const kVec2i&, kColor&)> lambda) const;

protected:
	kImageGL(kGraphicsGL* graphics, GLuint frameBuffer, GLuint texture);

public:
	inline GLuint getFrameBufferGL() const {
		return _frameBuffer;
	}
	inline GLuint getTextureGL() const {
		return _texture;
	}
	virtual void save(kStream* stream, keImageFormat format) const;
	~kImageGL();
};
